package br.com.saeng2D.superficie.manipl;

import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.event.MouseInputListener;

import br.com.saeng2D.formulario.FormularioPrincipal;
import br.com.saeng2D.superficie.Superficie;
import br.com.saeng2D.util.Util;

//A super classe de todos os manipuladores de eventos ocorridos na superficie
public abstract class AbstratoManipulador implements MouseInputListener, MouseMotionListener {
	private final String TITULO_APLICACAO = Util.getString("label_titulo_aplicacao");
	protected FormularioPrincipal formularioPrincipal;
	protected Superficie superficie;
	
	//Construtor
	public AbstratoManipulador(Superficie superficie) {
		this.superficie = superficie;
		formularioPrincipal = this.superficie.getFormularioPrincipal();
	}

	//Quando o objeto eh clicado
	public abstract void mouseClicked(MouseEvent e);

	//Quando a ponta do mouse alcanca o objeto
	public abstract void mouseEntered(MouseEvent e);

	//Quando o mouse sai o objeto
	public abstract void mouseExited(MouseEvent e);

	//Quando o mouse eh pressionado no objeto 
	public abstract void mousePressed(MouseEvent e);

	//Quando o mouse eh liberado 
	public abstract void mouseReleased(MouseEvent e);

	//Quando o mouse eh arrastado
	public abstract void mouseDragged(MouseEvent e);

	//Quando o mouse eh movido sobre o objeto
	public abstract void mouseMoved(MouseEvent e);
	
	//Antes do manipulador ser substituido ele sera notificado
	public abstract void antesSubstituicao();
	
	//Apos o manipulador ser substituido ele sera notificado
	public abstract void aposSubstituicao();
	
	public void atualizarTitulo(MouseEvent e) {
		formularioPrincipal.setTitle(TITULO_APLICACAO + "[" + e.getX() + ", " + e.getY() + "]");
	}
}